#ifndef LINESEGMENT_H
#define LINESEGMENT_H

#include "Vetor_Ponto/Point.h"

class LineSegment
{
    private:
        /// Atributos: ///
        size_t dimensao;
        Point i;
        Point f;

        /// Métodos privados: ///
        // Setar a dimensão:
        void set_dimensao(size_t d);                            ///ok!

    public:
        /// Métodos públicos: ///
        // Construtores e destrutor:
        LineSegment();                                          ///ok!
        LineSegment(const Point& p_inicio, const Point& p_fim); ///ok!
        ~LineSegment();                                         ///ok!

        // Imprimir o segmento:
        void imprimir() const;                                  ///ok!

        // Retornar a dimensão:
        size_t get_dimensao() const;                            ///ok!

        // Pegar os pontos inicial e final:
        const Point& getI() const {return(i);}                  ///ok!
        const Point& getF() const {return(f);}                  ///ok!

        // Retornar o comprimento do segmento:
        TIPO_ELEMENTO comprimento() const;                      ///ok!

        // Calcular a área do triangulo formado pelo ponto "p" e o segmento:
        TIPO_ELEMENTO area_triangulo(const Point& p) const;     ///ok!

        // Calcular a distância entre o ponto "p" e o segmento:
        TIPO_ELEMENTO distancia(const Point& p) const;          ///ok!

        // Checar se dois segmentos se interceptam:
        bool intercepta(const LineSegment& s) const;            ///ok!
};

#endif // LINESEGMENT_H
